    // JS中的8种数据类型及区别
    // 包括值类型(基本对象类型)和引用类型(复杂对象类型)
// 基本类型(值类型)：
//  Number(数字),String(字符串),Boolean(布尔),Symbol(符号),null(空),undefined(未定义) //在内存中占据固定大小，保存在栈内存中
//引用类型(复杂数据类型)： 
//  Object(对象)、Function(函数) Array(数组)、Date(日期)、RegExp(正则表达式)
 // 特殊的基本包装类型(String、Number、Boolean) 以及单体内置对象(Global、Math)等 引用类型的值是对象 保存在堆内存中，栈内存存储的是对象的变量标识符以及对象在堆内存中的存储地址。


 // var let const
 // 1.声明提升 => 
 console.log(num); //undefined
 var num =123 

// 2.变量覆盖 
 var num1 =12
 var num1 =34
 console.log(num1); //34

 var obj ={}
 var obj = '123213'
 console.log(obj); // '123213'
// 3.没有块级作用域
 function fn2(){
    for(var i =0;i<3;i++){
        console.log(i);
    }
    // console.log(i);
 }
//  fn2()
// const 声明之后必须赋值  定义后的值不能修改 const 支持块级作用域,  常量 定义命名规范大写
const DEMO = 123
// demo = 456
    // console.log(demo);


    // 互换值 
    let a = 1;
    let b = 2;
    // 解构
    [a,b ] = [b,a]
    console.log(a,b);
    let arr = [12,43,23,12,43,55,34]
    let newarr = [...new Set(arr)]
    console.log(newarr);
    // 标杆 => 构造函数同步执行
const promise = new Promise((resolve, reject) => {
    console.log(1)
    resolve();
    console.log(2)
    })
    // .then()异步执行
    promise.then(() => {
    console.log(3)
    })
    console.log(4)